import {
  getToken,
  logout,
  setToken,
  removeToken,
  getUserId,
  setUserId,
  removeUserId,
} from "@/utils/auth";
import { login, getInfo } from "@/api/user";
import { resetRouter } from "@/router";

const userStore = {
  namespaced: true,
  state: {
    token: getToken() || "",
    userId: getUserId(),
    userInfo: {},
  },
  mutations: {
    // 存储token
    SET_TOKEN(state, newToken) {
      state.token = newToken;
      // 本地存储存一份token
      setToken(newToken);
    },
    // 存储用户id
    SET_USERID(state, userId) {
      state.userId = userId;
      setUserId(userId);
    },
    // 删除token
    REMOVE_TOKEN(state) {
      state.token = null;
      // 从本地存储移除token
      removeToken();
    },
    // 存储个人信息
    SET_USER_INF(state, userInfo) {
      state.userInfo = userInfo;
    },
    // 清空个人信息
    REMOVE_USER_INF(state, userInfo) {
      state.userInfo = userInfo;
    },
    // 清空用户Id
    REMOVE_USER_USERID(state) {
      state.userId = null;
      removeUserId();
    },
  },
  actions: {
    // 登录
    async login(context, data) {
      const res = await login(data);
      console.log(res);
      context.commit("SET_TOKEN", res.data.token);
      context.commit("SET_USERID", res.data.user_id);
    },
    // 获取用户信息
    async getUserInfo(context) {
      const res = await getInfo();
      console.log(res);
      context.commit("SET_USER_INF", res.data);
      return res.data;
    },
    // 退出登录
    logout(context) {
      // 清空信息 token
      context.commit("REMOVE_TOKEN");
      // 清空个人信息
      context.commit("REMOVE_USER_INF", {});
      // 清空 userId
      context.commit("REMOVE_USER_USERID");
      // 重置路由
      resetRouter();
      // 去设置权限模块下路由为初始状态
      // 调用根级的mutations或者action都是挂载全局的 所以可以直接调用
      context.commit("permission/setRoutes", [], { root: true });
    },
  },
};
export default userStore;
